package com.atguigu.campusintelligentassistantsystem.service;

import com.atguigu.campusintelligentassistantsystem.entity.Notice;
import com.atguigu.campusintelligentassistantsystem.entity.NoticeFavorite;
import com.atguigu.campusintelligentassistantsystem.repository.NoticeFavoriteRepository;
import com.atguigu.campusintelligentassistantsystem.repository.NoticeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

@Service
public class NoticeService {

    @Autowired
    private NoticeRepository noticeRepository;

    @Autowired
    private NoticeFavoriteRepository noticeFavoriteRepository;

    /**
     * 发布通知
     * @param notice 通知信息
     * @return 保存后的通知
     */
    public Notice publishNotice(Notice notice) {
        notice.setPublishTime(LocalDateTime.now());
        return noticeRepository.save(notice);
    }

    /**
     * 获取所有通知（按发布时间倒序）
     * @return 通知列表
     */
    public List<Notice> getAllNotices() {
        return noticeRepository.findAllByOrderByPublishTimeDesc();
    }

    /**
     * 根据类型获取通知
     * @param noticeType 通知类型
     * @return 通知列表
     */
    public List<Notice> getNoticesByType(String noticeType) {
        return noticeRepository.findByNoticeTypeOrderByPublishTimeDesc(noticeType);
    }

    /**
     * 根据ID获取通知
     * @param id 通知ID
     * @return 通知信息
     */
    public Notice getNoticeById(Long id) {
        Optional<Notice> notice = noticeRepository.findById(id);
        return notice.orElse(null);
    }

    /**
     * 更新通知
     * @param notice 通知信息
     * @return 更新后的通知
     */
    public Notice updateNotice(Notice notice) {
        return noticeRepository.save(notice);
    }

    /**
     * 删除通知
     * @param id 通知ID
     */
    public void deleteNotice(Long id) {
        noticeRepository.deleteById(id);
    }

    /**
     * 收藏通知
     * @param userId 用户ID
     * @param noticeId 通知ID
     * @return 收藏记录
     */
    public NoticeFavorite favoriteNotice(Long userId, Long noticeId) {
        // 检查是否已经收藏
        NoticeFavorite existingFavorite = noticeFavoriteRepository.findByUserIdAndNoticeId(userId, noticeId);
        if (existingFavorite != null) {
            return existingFavorite; // 已经收藏，直接返回
        }

        // 创建新的收藏记录
        NoticeFavorite favorite = new NoticeFavorite();
        favorite.setUserId(userId);
        favorite.setNoticeId(noticeId);
        favorite.setFavoriteTime(LocalDateTime.now());
        return noticeFavoriteRepository.save(favorite);
    }

    /**
     * 取消收藏通知
     * @param userId 用户ID
     * @param noticeId 通知ID
     */
    public void unfavoriteNotice(Long userId, Long noticeId) {
        NoticeFavorite favorite = noticeFavoriteRepository.findByUserIdAndNoticeId(userId, noticeId);
        if (favorite != null) {
            noticeFavoriteRepository.delete(favorite);
        }
    }

    /**
     * 获取用户收藏的通知
     * @param userId 用户ID
     * @return 收藏列表
     */
    public List<NoticeFavorite> getUserFavorites(Long userId) {
        return noticeFavoriteRepository.findByUserIdOrderByFavoriteTimeDesc(userId);
    }
}